<?php
/**
 * Upload file
 * @param  string
 * @param  array
 * @return mixed
 */
function upload($field, $config=array()){ 
    //cấu hình upload
    $options = array(
        'name' => '',
        'upload_path'  => './',
        'allowed_exts' => '*',
        'overwrite'    => TRUE,
        'max_size'     => 0
    );
    $options = array_merge($options, $config); 
    
    //nếu chưa upload? kết thúc
    if( !isset($_FILES[$field])) return FALSE;
    
    //file upload
    $file = $_FILES[$field];
    
    //lỗi upload? kết thúc
    if ($file['error'] != 0) return FALSE;
    
    //phần mở rộng của file
    $temp = explode(".", $file["name"]);
    $ext = end($temp);
    
    //kiểm tra phần mở rộng
    if ($options['allowed_exts']!='*') {
        $allowedExts = explode('|', $options['allowed_exts']);
        if ( !in_array($ext, $allowedExts)) return FALSE;
    }
    
    //kiểm tra file type
    if ( !is_allowed_filetype($ext, $file['type']) ) return FALSE;
    
    //kích thước quá lớn? kết thúc
    $size = $file['size'] / 1024 / 1024;
    if(($options['max_size']>0) && ($size > $options['max_size'])) return FALSE;    
    
    $name = empty($options['name']) ? $file["name"] : $options['name'].'.'.$ext;
    $dir = rtrim($options['upload_path'], '/');    
    $file_path = $dir.'/'.$name;
    
    //cho phép ghi vào thư mục
    if ( !is_writable($dir)) {
        @chmod($dir, 0777);
    }
    
    //nếu cho phép ghi đè
    if ($options['overwrite'] && file_exists($file_path)) {
        @unlink($file_path);
    }
    
    //upload file và trả về tên file_path
    if ( ! @move_uploaded_file($file["tmp_name"], $file_path)) {
        return FALSE;
    }
    
    return $file_path;
}

/**
 * Kiểm tra file type
 * @param  string
 * @param  string
 * @return boolean
 */
function is_allowed_filetype($ext, $type) {
    require('libraries/mimes.php');
    if (isset($mimes[$ext])) {
        if (is_array($mimes[$ext])) {
            if ( in_array($type, $mimes[$ext]) ) return TRUE;
        } else {
            if ( $type == $mimes[$ext] ) return TRUE;
        }
    }
    return FALSE;
}